package com.zac.coroutine.algorithm.leetcode.array

import kotlin.math.abs

/**
 * author zac
 * date 2025/8/2
 * 219. 存在重复元素 II
 *给你一个整数数组 nums 和一个整数 k ，判断数组中是否存在两个 不同的索引 i 和 j ，满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在，返回 true ；否则，返回 false 。
 *示例 1：
 *
 * 输入：nums = [1,2,3,1], k = 3
 * 输出：true
 * 示例 2：
 *
 * 输入：nums = [1,0,1,1], k = 1
 * 输出：true
 * 示例 3：
 *
 * 输入：nums = [1,2,3,1,2,3], k = 2
 * 输出：false
 *
 */
object ContainsNearbyDuplicate {

    @JvmStatic
    fun main(args: Array<String>) {
        containsNearbyDuplicate(intArrayOf(1, 0,1, 1), 1)
    }

    /**
     * 标准的时空转换 空间换时间
     */
    fun containsNearbyDuplicate(nums: IntArray, k: Int): Boolean {
        val map = HashMap<Int, Int>()
        nums.forEachIndexed { index, item ->
            val preVal = map.put(item, index)
            if (preVal != null) {
                if (abs(preVal - index) <= k) {
                    return true
                }
            }
        }

        return false
    }

}